import router from './router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import { getToken } from '@/utils/auth' // get token from cookie
import getPageTitle from '@/utils/get-page-title'

NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ['/login', '/auth-redirect', '/share'] // no redirect whitelist

router.beforeEach(async(to, from, next) => {
  // start progress bar
  NProgress.start()

  // set page title
  document.title = getPageTitle(to.meta.title)

  // determine whether the user has logged in
  const hasToken = getToken()

  if (hasToken) {
    
    if (to.path === '/login') {
      // if is logged in, redirect to the home page
      next({ path: '/' })
      NProgress.done()
    } else {
       // determine whether the user has obtained his permission roles through getInfo
      var hasRoles = store.getters.roles && store.getters.roles.length > 0
      console.log('hasroles:' + store.getters.roles)
      // if(!hasRoles)
      // {
      //   if(sessionStorage.getItem('roles'))
      //   {
      //       var roles=JSON.parse(sessionStorage.getItem('roles'))
      //       console.log('cache roles:')
      //       console.log(roles)
      //     const accessRoutes = await  store.dispatch('permission/generateRoutes', roles)
      //     store.commit('user/SET_ROLES', roles)

          

      //    console.log(accessRoutes)
      //    // dynamically add accessible routes
      //    router.addRoutes(accessRoutes)
      //    hasRoles = store.getters.roles && store.getters.roles.length > 0
      //   }

      // }

      if (hasRoles) {
        if(to.path=='/')
        {
          NProgress.done()
        if(store.getters.roles.indexOf('客户意向提供人')!=-1)
        {

          next('/leadmg/leadmg')
          return 
        }

        if(store.getters.roles.indexOf('经纪人')!=-1)
        {

          next('/youbao/lead')
          return 
        }
        if(store.getters.roles.indexOf('公司管理员')!=-1)
        {
        console.log('公司管理员')
          next('/customerlead/customerlead')
          return 
        }
        if(store.getters.roles.indexOf('超级管理员')!=-1)
        {

          next('/youbao/lead')
            return 

        }

      }
      NProgress.done()
        console.log('path2:' + to.path)
        next()
        // console.log('ava:' + store.getters.avatar)
    //     if (to.path === '/profile/index' && !store.getters.avatar) {
		// 	if(from.path === '/profile/edit')
		// NProgress.done()
		// 		else
    //       next('/profile/edit')
    //     } else { next() }
      } else {
        console.log('norole:' )

        

        try {
          // get user info
          // note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
        // const { roles } = await store.dispatch('user/getInfo')
         //  store.commit('user/SET_ROLES', ['admin'])
          // store.commit('user/SET_NAME', localStorage.getItem('phone'))
          // store.commit('user/SET_AVATAR', 'http://tests.sodataint.com/image/default/2518F57C23004B3C80DB69410F4CDAC7-6-2.png')
          // store.commit('user/SET_INTRODUCTION', '管理员')
      // const roles = ['admin']

          // generate accessible routes map based on roles
        //  const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
        // console.log(accessRoutes)
        //  dynamically add accessible routes
       //  router.addRoutes(accessRoutes)

          // hack method to ensure that addRoutes is complete
          // set the replace: true, so the navigation will not leave a history record
          // next({ ...to, replace: true })


                 if(localStorage.getItem('roles'))
                 {
var roles=JSON.parse(localStorage.getItem('roles'))
          const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
          store.commit('user/SET_ROLES', roles)

       //  console.log("accessroutes")

         console.log(accessRoutes)
         // dynamically add accessible routes
         router.addRoutes(accessRoutes)
        console.log('has role ok'+roles)

        NProgress.done()
        console.log('topath:'+to.path)
    if(to.path=='/')
    {
        if(roles.indexOf('客户意向提供人')!=-1)
        {

          next('/leadmg/leadmg')
          return 

        }

        if(roles.indexOf('经纪人')!=-1)
        {

          next('/youbao/lead')
          return 

        }
        if(roles.indexOf('公司管理员')!=-1)
        {

          next('/customerlead/customerlead')
            return 

        }
        if(roles.indexOf('超级管理员')!=-1)
        {

          next('/youbao/lead')
            return 

        }
      }









         next({ ...to, replace: true })
                 }
                 else{









            await store.dispatch('user/resetToken')
          //  Message.error('Has Error')
            next(`/login?redirect=${to.path}`)

                 }
          
          NProgress.done()
        } catch (error) {
          // remove token and go to login page to re-login
          await store.dispatch('user/resetToken')
          Message.error(error || 'Has Error')
          next(`/login?redirect=${to.path}`)
          NProgress.done()
        }
      }
    }
  } else {
    /* has no token*/
    console.log('no token')

    if (whiteList.indexOf(to.path) !== -1) {
      // in the free login whitelist, go directly
      next()
    } else {
      // other pages that do not have permission to access are redirected to the login page.
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  // finish progress bar
  NProgress.done()
})
